package hip.util;

import java.util.HashMap;
import java.util.Map;

/**
 * @author Loanin
 * @date 2014年8月26日
 * @describe 使用ID锁住某条记录, 保证多线程时不会同时处理同一ID的数据
 */
public class RowLock {
    // 这个锁的作用是，保证2比相同DCID的数据不会同时操作中心库
    private Map<String, DataLock> dataLocks = new HashMap<String, DataLock>();

    public DataLock getLock(String id) {// 对数据进行锁，保证同一个ID的数据不会被两个事物同时执行
        DataLock dl;
        if (dataLocks.containsKey(id)) {// 如果有，就等待
            dl = dataLocks.get(id);
            synchronized (dl) {
                dl.waitLock();
            }
        }
        dl = new DataLock();
        synchronized (dataLocks) {
            dataLocks.put(id, dl);
        }
        return dl;
    }

    public void removeLock(String id) {// 移除数据上的锁
        if (id != null)
            synchronized (dataLocks) {
                dataLocks.remove(id);
            }
    }

    private class DataLock {
        public void waitLock() {
        }
    }
}
